#include <stdio.h>
int main()
{
    int a[3][4] = {{1,0,2,3}, {4,5,6,7}, {8,9,10,11}};
    //原先a就代表整个二维数组，但是当对其进行加减操作时，就会自动强制转化为指针，指向第一个一维数组，即&a[0].=> *a=a[0]
    //原先a[0]就代表第一个一维数组,但是当对其进行加减操作时,就会自动强制转化为指针,指向第一个一维数组的第一个元素，即&a[0][0].=> *a[0]=a[0][0]


    //printf("%d\n",sizeof(a));//48 整个数组的长度
    // printf("%d\n",sizeof(a[0][0]));//4 单个元素
    // printf("%d\n",sizeof(a[0]));//第一个一维数组元素的长度
    //printf("%d\n",sizeof(a[0]+0));//会对其进行强制类型转换，变成一个指针，指向第一个一维数组的第一个元素
    // printf("%d\n",sizeof(a[0]+2));//会对其进行强制类型转换，变成一个指针。表示为a[0][2]的地址
    // printf("%d\n",sizeof(*(a[0]+1)));//表示为a[0][1]的值
    //printf("%d\n",sizeof(a+1));//会对其进行强制类型转换，变成一个指针.指向整个第二个一维数组
    //printf("%x\n",sizeof(*(a+1)));//等于a[1]
    //printf("%d\n",sizeof(&a[0]+1));//等于a[1]
    //printf("%d\n",sizeof(&a[1]));
    //printf("%d\n",sizeof(*(&a[0]+1)));
    /*     *(a+1) = a[1] = *(&a[0]+1)     a+1 = &a[1] = &a[0]+1  三者表示为整个第二个一维数组的长度的地址*/

    // printf("%d\n",sizeof(*a+0));//相当于a[0]
    printf("%x\n",&a);
    printf("%x\n",&a+1);//指向数组外了

    return 0;
}